Функции. Параметры процедур и функций

 

Процедуры и функции с параметрами - важное средство сделать нашу программу надежнее и понятнее.

Мы с вами уже сталкивались со стандартными функциями. Напри­мер, выражение 10 + Abs(-20) имеет значение 30, так как функция Abs(-20) обозначает абсолютную величину числа -20. Стандартная функция - некая скрытая программа, которая принимает свои параметры, указанные в скобках, в качестве исходных данных, что-то делает с ними и в результате получает одну величину, которая и является зна­чением функции.

Если вам недостаточно стандартных функций, вы можете создавать собственные функции пользователя.

Пример: Предположим, вам часто приходится вычислять периметры прямоугольников. Тогда вам было бы удобно иметь функцию вида perimetry(10,4), которая имела бы значение периметра прямоугольника со сторонами 10 и 4. Рассмотрим, как это делается, на примере программы вычисления суммарного периметра трех прямоугольников:

Private Function perimeter (dlina  As Integer, shirina  As Integer)  As Long

        perimetr = 2 * (dlina + shirina)

 End Function

 Private Sub Command1_Click()

Print perimetr(10,4) + perimetr(20, 30) + perimetr(3, 8)

End Sub

Здесь щелчком по кнопке Command1 мы запускаем вычисление суммы периметров трех прямоугольников: 10*4, 20*30 и 3*8. А для того, что­бы узнать, как вычислять perimetr, компьютер заглядывает в определение функции. Его можно сразу же отличить от определения процедуры наличием слова Function вместо Sub.

Вы видите, что определение функции очень похоже на опреде­ление процедуры. Но функция в отличие от процедуры обладает некоторыми свойствами переменной величины, и поэтому опреде­ление функции отличается от определения процедуры следующими двумя вещами:

      в заголовке функции после скобок с параметрами должен быть ука­зан тип значения функции (у нас это Long);

      внутри определения функции ей хотя бы раз должно быть присвое­но какое-нибудь значение, как если бы это была не функция, а обычная переменная (у нас этим занимается оператор perimetr= 2*(dlina+shirina)).

Обращение к функции также отличается от обращения к процеду­ре. Если обращение к процедуре - самостоятельный оператор, то обращение к функции - это обычно составная часть выражения (10+Abs(-20), Print perimetr(10,4) + perimetr(20,30)).

Рассмотрим другой пример функции.

Пример. Напишите функцию Ответ, которая бы в ответ на вопрос человека: « Какое сегодня число?», принимала значение правильной даты; ответом на любой другой вопрос должно служить: « Не знаю». Вот про­грамма:

Dim q As String

  Private Function Ответ(Вопрос As String) As String

     If  Вопрос = "Какое сегодня число?" Then

       Ответ = Date

      Else

       Ответ = "He знаю"

      end if

 End Function

 Private Sub Command1_Click()

   q = InputВох("Задайте вопрос")

   Print Ответ(q)

 End Sub

Здесь щелчком по кнопке Command1 мы вызываем появление на экране окна InputBox с предложением задать вопрос. Введенный нами вопрос запоминается в переменной q. Следующая строка (Print Ответ(q)) вызывает к жизни нашу функцию. При этом компьютер, выполняя те­ло функции, вместо параметра Вопрос работает с переменной q, так как именно она была указана в обращении к функции. Получается очень удобно: когда мы пишем функцию, нам не нужно заботиться о том, какие имена переменных будут использованы при обращении к функ­ции, мы просто даем параметру любое пришедшее в голову имя. И на­оборот, когда мы пишем обращение к функции, нам не нужно забо­титься о том, какие имена имеют параметры в заголовке функции.

 

 

 

Будем называть процедуры и функции подпрограммами, так как они являются составными частями программы.

Переменные, которые объявлены в начале окна кода, могут быть использованы в любой подпрограмме этого окна. Говорят, что они видны из любой подпрограммы. Их называют локальными перемен­ными формы.

Если же переменные объявлены внутри подпрограммы или явля­ются параметрами подпрограммы, то они и использованы могут быть только внутри нее. Говорят, что они не видны из других подпрограмм. Их называют локальными переменными подпрограммы.

 

Задать вопрос.

 

 ТЕСТ   Практическое задание

Hosted by uCoz